package cn.modoumama.common.tools;

import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 类描述：String操作，继承于org.apache.commons.lang3.StringUtils<br>
 * 创建人：邓强   <br>
 * 创建时间：2018/5/2/002 18:28<br>
 *
 * @version V1.0
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {
    /**
     * 转全角的函数(SBC case)<br>
     * 任意字符串 /// 全角字符串<br>
     * 全角空格为12288,半角空格为32<br>
     * 其他字符半角(33-126)与全角(65281-65374)的对应关系是：均相差65248<br>
     *
     * @param input
     * @return
     */
    public static String toSBC(String input) {
        // 半角转全角：
        char[] c = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == 32) {
                c[i] = (char) 12288;
                continue;
            }
            if (c[i] < 127)
                c[i] = (char) (c[i] + 65248);
        }
        return new String(c);
    }

    /**
     * 转半角的函数(DBC case)<br>
     * 任意字符串 /// 半角字符串<br>
     * 全角空格为12288,半角空格为32<br>
     * 其他字符半角(33-126)与全角(65281-65374)的对应关系是：均相差65248<br>
     *
     * @param input
     * @return
     */
    public static String toDBC(String input) {
        char[] c = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == 12288) {
                c[i] = (char) 32;
                continue;
            }
            if (c[i] > 65280 && c[i] < 65375)
                c[i] = (char) (c[i] - 65248);
        }
        return new String(c);
    }

    /**
     * 获取唯一串
     * @return
     */
    public static String getUnique() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * 隐藏手机号码中间4位号码
     * @param phone
     * @return
     */
    public static String encryptPhone(String phone) {
        if (phone.length()==11) {
            return phone.substring(0,3)+"****"+phone.substring(7, 11);
        }else {
            return "";
        }
    }

    /**
     * 用对象中的值替换字符串中的{code}，<br>
     * 如字符串位   “11111{name}1452”   <br>
     * object 中name 属性的值为  “名称” <br>
     * 返回的字符串为 “11111名称1452” <br>
     * @param text
     * @param object
     * @return
     */
    public static String replace(String text, Object object) {
        if (text == null || text.isEmpty()) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();

        String pattern = "[\\{｛]([^\\}｝]*)[\\}｝]";

        // 创建 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 现在创建 matcher 对象
        Matcher m = r.matcher(text);
        int start = 0;
        Object value = null;
        while (m.find()) {
            if(m.start()>start){
                stringBuilder.append(text,start, m.start());
            }
            value = ObjectUtils.getValue( m.group(m.groupCount()), object);
            if(value != null){
                stringBuilder.append(value);
            }

            start = m.end();
        }
        if(start < text.length()-1){
            stringBuilder.append(text,start, text.length());
        }

        return stringBuilder.toString();
    }


    /**
     * 首字母转大写
     *
     * @param s 需要转换的字符串
     * @return
     */
    public static String toUpperCaseFirstOne(String s) {
        if (Character.isUpperCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder())
                    .append(Character.toUpperCase(s.charAt(0)))
                    .append(s.substring(1)).toString();
    }
}
